<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>云淡风轻</title>

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  <link href="/my_technology_blog/index.xml" rel="alternate" type="application/rss+xml" title="云淡风轻" />
  
</head>

  <body class=" ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>云淡风轻</h1></a>
      <p class="lead">
       这里是人凤的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        <li><a href="http://liu_ren_feng.gitee.io/my_technology_blog/tree/"> 个人简历 </a></li>
      </ul>
    </nav>

  </div>
</aside>

    <main class="content container">
    <div class="posts">
<article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/six/">吐血整理！绝不能错过的24个顶级Python库</a>
  </h1>
  <time datetime="2020-05-19T08:11:07&#43;0800" class="post-date">Tue, May 19, 2020</time>
  Python有以下三个特点：
 易用性和灵活性 全行业高接受度：Python无疑是业界最流行的数据科学语言 用于数据科学的Python库的数量优势  事实上，由于Python库种类很多，要跟上其发展速度非常困难。因此，本文介绍了24种涵盖端到端数据科学生命周期的Python库。
文中提及了用于数据清理、数据操作、可视化、构建模型甚至模型部署(以及其他用途)的库。这是一个相当全面的列表，有助于你使用Python开启数据科学之旅。
用于不同数据科学任务的Python库
用于数据收集的Python库
 Beautiful Soup Scrapy Selenium  用于数据清理和数据操作的Python库
· Pandas · PyOD · NumPy · Spacy
用于数据可视化的Python库
 Matplotlib Seaborn Bokeh  用于建模的Python库
 Scikit-learn TensorFlow PyTorch  用于模型解释的Python库
 Lime H2O  用于语音处理的Python库
 Librosa Madmom pyAudioAnalysis  用于图像处理的Python库
 OpenCV-Python Scikit-image Pillow  作为数据库的Python库
 Psycopg SQLAlchemy  用于模型部署的Python库
 Flask  用于数据收集的Python库
你是否曾遇到过这样的情况：缺少解决问题的数据？这是数据科学中一个永恒的问题。这也是为什么学习提取和收集数据对数据科学家来说是一项非常重要的技能。数据提取和收集开辟了前所未有的道路。
以下是三个用于提取和收集数据的Python库：
Beautiful Soup
收集数据的最佳方式之一就是抓取网站（当然是以合乎道德和法律的手段！）徒手做这件事需要耗费大量的劳动和时间。Beautiful Soup无疑是一大救星。
  
  <div class="read-more-link">
    <a href="/my_technology_blog/six/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/one/">【GitHub】推荐一款功能强大的词云工具，支持更改形状和背景色、自定义风格、颜色流动…</a>
  </h1>
  <time datetime="2020-04-07T16:44:57&#43;0800" class="post-date">Tue, Apr 7, 2020</time>
  【GitHub】推荐一款功能强大的词云工具，支持更改形状和背景色、自定义风格、颜色流动…
stylecloud 是一个 Python 包，它基于流行的 word_cloud 包，并添加了一些有用的功能，从而创建出独特的词云。stylecloud 具备以下特点：
  为词云提供（任意大小）的图标形状（通过 Font Awesome 5.11.2 获得）；
  支持高级调色板（通过 palettable 实现）；
  为上述调色板提供直接梯度；
  支持读取文本文件，或预生成的 CSV 文件（包含单词和数字）；
  提供命令行接口。
  stylecloud 包由数据科学家 Max Woolf 创建，是对其 2016 年风格化词云项目的较正式实现。
安装
你可以通过 pip 安装 stylecloud：
pip install stylecloud  使用
你可以通过 Python 脚本使用 stylecloud，也可以直接使用独立的 CLI app。 或使用以下 Python 脚本：
1. import stylecloud 2. stylecloud.gen_stylecloud(file_path= constitution.txt )  得到如下词云：
但你可以做到更多！比如使用 Font Awesome 提供的免费图标更改词云的形状，通过 palettable 更改调色板以自定义风格，更改背景颜色，以及最重要的，添加梯度使颜色按照特定方向流动。
  
  <div class="read-more-link">
    <a href="/my_technology_blog/one/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/four/">【数据技巧】时间不够嘛？试试这12种高效Numpy和Pandas函数</a>
  </h1>
  <time datetime="2020-03-26T17:52:27&#43;0800" class="post-date">Thu, Mar 26, 2020</time>
  在本文中，介绍了 12 种 Numpy 和 Pandas 函数，这些高效的函数会令数据分析更为容易、便捷。
Numpy 的 6 种高效函数 首先从 Numpy 开始。Numpy 是用于科学计算的 Python 语言扩展包，通常包含强大的 N 维数组对象、复杂函数、用于整合 C/C++和 Fortran 代码的工具以及有用的线性代数、傅里叶变换和随机数生成能力。
除了上面这些明显的用途，Numpy 还可以用作通用数据的高效多维容器（container），定义任何数据类型。这使得 Numpy 能够实现自身与各种数据库的无缝、快速集成。
接下来一一解析 6 种 Numpy 函数。
argpartition()
借助于 argpartition()，Numpy 可以找出 N 个最大数值的索引，也会将找到的这些索引输出。然后我们根据需要对数值进行排序。
x = np.array([12, 10, 12, 0, 6, 8, 9, 1, 16, 4, 6, 0])index_val = np.argpartition(x, -4)[-4:] index_val array([1, 8, 2, 0], dtype=int64)np.sort(x[index_val]) array([10, 12, 12, 16])  allclose()
allclose() 用于匹配两个数组，并得到布尔值表示的输出。如果在一个公差范围内（within a tolerance）两个数组不等同，则 allclose() 返回 False。该函数对于检查两个数组是否相似非常有用。
  
  <div class="read-more-link">
    <a href="/my_technology_blog/four/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/five/">Python中的*args和**kwargs是什么？该如何使用？</a>
  </h1>
  <time datetime="2018-04-08T08:29:30&#43;0800" class="post-date">Sun, Apr 8, 2018</time>
  在编程中，函数就是生命！
作为使用Python的新手——无论是编程新手，还是熟悉另一语言的人——都需要学习函数定义中的参数数目是否和想要传达的变元数目匹配。
这是基础性知识——有助于了解这个世界。
然而，接触到函数定义中的*args和**kwargs时，也会让新手刚开始就遇到心理障碍。
在Python中的代码中经常会见到这两个词 args 和 kwargs，前面通常还会加上一个或者两个星号。
别被这些语句所绊倒。其实这些并不是什么超级特殊的参数，也并不奇特，只是编程人员约定的变量名字，args 是 arguments 的缩写，表示位置参数；kwargs 是 keyword arguments 的缩写，表示关键字参数。
这其实就是 Python 中可变参数的两种形式，并且 *args 必须放在 **kwargs 的前面，因为位置参数在关键字参数的前面。
接下来，我们就具体学学如何使用它们。
位置参数vs关键字参数 为了学习什么是*args和**kwargs，我们需要区分两个概念。
首先，分清楚位置参数和关键字参数的区别。在最基本的函数中，做一个匹配游戏——参数1与参数1匹配，参数2与参数2匹配，诸如此类。
def printThese(a,b,c): print(a, &quot;is stored in a&quot;) print(b, &quot;is stored in b&quot;) print(c, &quot;is stored inc&quot;)printThese(1,2,3) &quot;&quot;&quot; 1 is stored in a 2 is stored in b 3 is stored in c &quot;&quot;&quot;  三项参数都是必需的，缺了其中一个就会致错。
def printThese(a,b,c): print(a, &quot;is stored in a&quot;) print(b, &quot;is stored in b&quot;) print(c, &quot;is stored inc&quot;)printThese(1,2) &quot;&quot;&quot; TypeError: printThese() missing 1 required positional argument: c &quot;&quot;&quot;  为某函数定义中的参数给定默认值，该参数随后就会变为可选参数。
  
  <div class="read-more-link">
    <a href="/my_technology_blog/five/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/">常用方法</a>
  </h1>
  <time datetime="2018-03-27T19:21:56&#43;0800" class="post-date">Tue, Mar 27, 2018</time>
  列表常用方法   append用于在列表末尾追加新的对象
 a = [1,2,3] a.append(4) the result ：[1, 2, 3, 4]    count方法统计某个元素在列表中出现的次数
 a = ['aa','bb','cc','aa','aa'] print(a.count('aa')) the result ：3    extend方法可以在列表的末尾一次性追加另一个序列中的多个值
 a = [1,2,3] b = [4,5,6] a.extend(b) the result ：[1, 2, 3, 4, 5, 6]    index函数用于从列表中找出某个值第一个匹配项的索引位置
 a = [1,2,3,1] print(a.index(1)) the result ：0    insert方法用于将对象插入到列表中
 a = [1,2,3] a.insert(0,'aa') the result : ['aa', 1, 2, 3]    pop方法会移除列表中的一个元素（默认是最后一个），并且返回该元素的值
  
  <div class="read-more-link">
    <a href="/my_technology_blog/%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/two/">10个必会的 PyCharm 技巧</a>
  </h1>
  <time datetime="2018-03-07T19:21:56&#43;0800" class="post-date">Wed, Mar 7, 2018</time>
  0. PyCharm 常用快捷键
1. 查看使用库源码
PyCharm 主程序员在 Stackoverflow 上答道
经常听人说，多看源码。源码不仅能帮我们搞清楚运行机制，还能学习优秀的库或者框架的最佳实践。
调用库时，你可以在你好奇的几乎任何地方点击 Command+B，就可以很方便的跳转到源码里的类，方法，函数，变量的定义。
2. 让你的代码 PEP8
写 Python 代码时，你会严格遵守 pep8 规范么？还是要遵守的，不然代码传到 github 或者知乎上被人怼就不好了。但是如果靠肉眼去检查和注意的话，太累，靠 PyCharm 来做这事就好，Command+Option+L，一键 pep8 走起。
3. 新手不再愁安装库
如果你是新手，可能会为了安装库而感到烦恼，在 PyCharm 里面可以使用你熟悉的图形化界面来安装库，就不用陷在一堆命令行里了。
4. 查找文件、类、方法
当我们需要在项目中寻找一个文件名的时候，输入Command + Shift + O，然后输入你想查找的文件名就可以了。如果你不记得全名了，只需要输入首字母，Pycharm 就会提示你。比如我想查找一个叫 test_errors.py 的文件，那么只需要输入 tee 就可以找到。又或者查询 test_errors_1.py 那么只需要输入 tee1 就可以查找到。
5. 快速选择代码块
你会怎么快速注释一段 Python 代码块？不会是一行一行的加#吧…… 在需要选择某个函数的时候，只需要把光标放在最前面，然后点击 Command + Option + Shift + [ ，就可以选择对当前代码块, 使用 Command + / 注释。
6. 快速插入常用代码
有时候需要输入很长的代码，比如 if __name__ == __main__ : ，这时候手动输入不如直接 Command + J ，就可以直接插入常用代码了。
  
  <div class="read-more-link">
    <a href="/my_technology_blog/two/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E5%8D%8F%E7%A8%8B/">进程&amp;线程&amp;协程</a>
  </h1>
  <time datetime="2018-02-07T19:21:56&#43;0800" class="post-date">Wed, Feb 7, 2018</time>
  进程 进程定义  进程是资源分配最小单位 当一个可执行程序被系统执行（分配内存等资源）就变成了一个进程 程序并不能单独运行，只有将程序装载到内存中，系统为它分配资源才能运行，这种执行的程序就称之为进程 程序和进程的区别就在于：程序是指令的集合，它是进程运行的静态描述文本；进程是程序的一次执行活动，属于动态概念 在多道编程中，我们允许多个程序同时加载到内存中，在操作系统的调度下，可以实现并发地执行。 进程的出现让每个用户感觉到自己独享CPU，因此，进程就是为了在CPU上实现多道编程而提出的。 进程之间有自己独立的内存，各进程之间不能相互访问 创建一个新线程很简单，创建新进程需要对父进程进行复制  多道编程概念 多道编程： 在计算机内存中同时存放几道相互独立的程序，他们共享系统资源，相互穿插运行
单道编程： 计算机内存中只允许一个的程序运行
进程优点： 提供了多道编程，让我们感觉我们每个人都拥有自己的CPU和其他资源，可以提高计算机的利用率
进程的两个重要缺点 a. 第一点：进程只能在一个时间干一件事，如果想同时干两件事或多件事，进程就无能为力了。
b. 第二点：进程在执行的过程中如果阻塞，即使进程中有些工作不依赖于输入的数据，也将无法执行（例如等待输入，整个进程就会挂起）。
c. 例如，我们在使用qq聊天， qq做为一个独立进程如果同一时间只能干一件事，那他如何实现在同一时刻 即能监听键盘输入、又能监听其它人给你发的消息, 即操作系统处理一会你的qq任务，又切换到word文档任务上了，每个cpu时间片分给你的qq程序时，你的qq还是只能同时干一件事呀
进程间互相访问数据的四种方法 注：不同进程间内存是不共享的，所以互相之间不能访问对方数据
法1: 利用Queues实现父进程到子进程（或子进程间）的数据传递
法2: 使用管道pipe实现两个进程间数据传递
法3: Managers实现很多进程间数据共享
法4：借助redis中间件进行数据共享
 进程池
 from multiprocessing import Process,Pool import time,os def foo(i): time.sleep(2) print(&quot;in the process&quot;,os.getpid()) #打印子进程的pid return i+100 def call(arg): print('--&gt;exec done:',arg,os.getpid()) if__name__ == '__main__': pool = Pool(3) #进程池最多允许5个进程放入进程池 print(&quot;主进程pid：&quot;,os.getpid()) #打印父进程的pid for i in range(10)    用法1 callback作用是指定只有当Foo运行结束后就执行callback调用的函数,父进程调用的callback函数
  
  <div class="read-more-link">
    <a href="/my_technology_blog/%E8%BF%9B%E7%A8%8B%E7%BA%BF%E7%A8%8B%E5%8D%8F%E7%A8%8B/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/my_technology_blog/tree/">刘人凤</a>
  </h1>
  <time datetime="1992-06-15T00:00:00Z" class="post-date">Mon, Jun 15, 1992</time>
  北京 Python全栈开发工程师
4年工作经验
手机：132-4441-6203
邮箱：13244416203@163.com
个人博客：http://liu_ren_feng.gitee.io/my_technology_blog/
个人简介
4年互联网从业经历，深厚的数据结构和算法基础，动手能力强， 熟练使用后端Django框架以及前端vue.js，对互联网技能培训有自己的见解和感悟。 沟通能力强，多次参与内部培训与技术分享，多次参与线上直播分享，对少儿编程具备一定前瞻性了解。
少儿编程（自我介绍）
您好，我是15年毕业的，之后就留在了北京在一家创业型团队起步， 一直使用python作为开发语言，在公司里也是一直和业务打交道，沉淀了大约一年左右， 我跳槽到了钱方好近(北京)科技有限公司，在新的技术团队里， 我接触到了vue框架，体会到了数据双向绑定这种先进的理念，同时由于前后端都参与开发（微信小程序）， 技术栈也越来越丰富，最近半年我在公司一直负责组织团队技术分享和新员工技术培训以及一些新技术的预研。 由于少儿编程在我国处于刚刚起步的阶段，我感觉很多人对少儿编程有很多误解，其实呢， 让小朋友学编程并不是就是说以后要去做程序员，而是培养一种冷静和逻辑化的思维， 我个人认为思维模式和思考问题的方法是尤为重要的，因为很多青少年 基础教育和家庭教育等等原因导致容易形成很多思维定式，这在工作和学习中会对他们造成障碍， 所以在青少年时期就培养逻辑化思维有助于人们成年后有更好的发展。我个人来讲，优势就是技术涉猎比较广， 前后端都接触过，沟通能力和理解能力比较强，属于听话，照做，执行的类型。
教育经历
2011.08 - 2015.06 吉林大学
技能列表
后端框架：Django,Flask
前端框架：Vue.js,HTML
数据库：MySQL,Mongodb,Redis,SQLite
工具：Git,Docker
其他：微信小程序/公众号开发, HTTP, Websocket
工作经历
2018年7月 - 至今 钱方好近(北京)科技有限公司
2016年9月 - 2018年5月 北京谐云科技有限公司
近期参与项目
参与宝宝树线上产品功能的预研和开发测试
项目简介：
宝宝树是一款以书籍形式记载宝宝成长，交流育儿心得的产品。包含五大模块，成长书，交流，服务，商城和我。涵盖功能为书籍行事记录宝宝点滴，发帖沟通交流，线上求助咨询和线下亲子活动，网上商城购买宝宝用品。
主导分布式短视频抓取爬虫系统2019年2月-至今 作为组长负责设计和开发基于Scrapy的分布式短视频抓取系统，优化爬虫策略和防屏蔽规则,利用Redis维护ip代理池，提升短视频抓取的效率和质量。 使用Jenkins自动化部署服务，提高系统可用性 使用Go lang对抓取框架进行重构，提高了200%的爬虫效率 利用Docker对项目进行重新拆分和架构，减少项目模块之间的资源耦合度，实现了持续集成 使用MarkDown编写公司技术文档以及维护，与团队成员共同进步 使用Selenium针对反爬虫进行反复测试和改进抓取方案 整合微信，微博，qq等多个三方登录平台，打造一键式社交账号绑定系统，提高用户体验
参与移动聚合支付后台管理系统(CMS)2018年8月-2019年2月
项目简介：
基于Tornado的后台管理平台，采用RBAC权限管理机制 利用Jieba分词模块对商户进行打标签操作，使用Mongodb存储标签数据 使用Supervisor对后台服务例如uwsgi和Gunicorn进行监控和操作，降低了日常维护成本 使用Redis作为缓存介质，利用其分布式锁和队列的特性开发并测试抢单秒杀功能。
参与在线视频监控直播平台
项目简介：
以SaaS服务为核心，向客户提供操作简便适用于多场景的云直播平台。2017年10月-2018年5月
搭建基于Docker挂载Nginx-rtmp的直播服务器 使用FFmpeg利用客户端设备进行推流，对视频进行头图提取，精华片段转换动图，视频埋点，视频信息分析等操作 开发，测试点播，直播，播单等7个模块。
采用FastDfs分布式文件系统作为海量视频存储方案，利用视频指纹规避重复文件问题,节约了大约20%的硬盘空间 在网页端使用vue.
  
  <div class="read-more-link">
    <a href="/my_technology_blog/tree/">Read More…</a>
  </div>
  
</article>
</div>
    </main>

    
  </body>
</html>
